package android.slc.module.component.dict.utils;

import android.slc.base.api.slc.callback.po.SlcEntity;
import android.slc.base.api.slc.config.ApiConfig;
import android.slc.base.api.slc.converter.SlcEntityErrorException;
import android.slc.base.vm.GlobalDataVm;

import android.slc.box.commonlibrary.compat.SlcResourceUtils;
import android.slc.module.component.dict.entity.ITreeDict;
import android.slc.module.component.dict.entity.TreeDictWrap;

import java.util.List;

import io.reactivex.rxjava3.functions.Function;
import org.apache.commons.collections4.CollectionUtils;

public class TreeDictUtils {

    /**
     * 字典子类型转字典
     *
     * @return
     */
    public static <T extends ITreeDict<T>> TreeDictWrap t2SysDictWrap(String code, List<T> activeTypeList) {
        return t2SysDictWrap(code, activeTypeList, false);
    }

    public static <T extends ITreeDict<T>> TreeDictWrap t2SysDictWrap(String code, List<T> activeTypeList, boolean putCache) {
        TreeDictWrap treeDictWrap = new TreeDictWrap();
        treeDictWrap.setSysDictList(activeTypeList);
        if (putCache) {
            GlobalDataVm.getInstance().treeDictShareVm.putTreeDictWrap(code, treeDictWrap);
        }
        return treeDictWrap;
    }

    public static <T extends ITreeDict<T>> Function<SlcEntity<List<T>>, SlcEntity<TreeDictWrap>> t2SysDictWrapMap(String code) {
        return t2SysDictWrapMap(code, false);
    }

    public static <T extends ITreeDict<T>> Function<SlcEntity<List<T>>, SlcEntity<TreeDictWrap>> t2SysDictWrapMap(String code, boolean putCache) {
        return listSlcEntity -> {
            SlcEntity<TreeDictWrap> sysDictWrapSlcEntity = new SlcEntity<>();
            sysDictWrapSlcEntity.setCode(listSlcEntity.getCode());
            sysDictWrapSlcEntity.setMsg(listSlcEntity.getMsg());
            if (listSlcEntity.isSuccess()) {
                if (CollectionUtils.isNotEmpty(listSlcEntity.getData())) {
                    sysDictWrapSlcEntity.setData(t2SysDictWrap(code, listSlcEntity.getData(), putCache));
                    return sysDictWrapSlcEntity;
                }
                throw new SlcEntityErrorException(ApiConfig.Value.SERVER_ERROR, SlcResourceUtils.getString("label_data_is_null"));
            }
            return sysDictWrapSlcEntity;
        };
    }
}
